<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtext - Xtext 2.15.0 Release Notes</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="/Xtext/images/favicon.png">
	
	<link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'>
	<!-- cover flow -->
	<link href="/Xtext/css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="/css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "https://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>
  
    <header class="site-header">

  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/Xtext/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="/Xtext/news.html">News</a></li-->
            <li ><a href="/Xtext/download.html">Download</a></li>
            <li ><a href="/Xtext/documentation/index.html">Documentation</a></li>
            <li ><a href="/Xtext/community.html">Community</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="https://info.itemis.com/professional-xtext-support" target="_blank">itemis</a></li>
                <li><a href="https://www.typefox.io/language-engineering/" target="_blank">TypeFox</a></li>
              </ul>
            </li>
            <li ><a href="https://eclipse.dev/Xtext/xtend">Xtend</a></li>
          </ul>
          <!--div class="nav pull-right">
            <li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li>
          </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->

</header>


    <div class="page-content">
  <div class="wrapper">
    <div id="page">  
    	<div class="inner">
    		<br/><br/>
    		<div id="maincontainer" class="container">
    			<div class="span8 offset1">
    				<h1>Xtext 2.15.0 Release Notes</h1>
    				<h4>Sep 4, 2018</h4>
    				<br/>
    				<p>This release focusses on stability, performance and the integration in Eclipse 2018-09.</p>

<h2 id="minimal-required-target-platform">Minimal Required Target Platform</h2>

<p>Xtext and Xtend 2.15 are built and tested against Eclipse Oxygen 3a and newer. Thus we recommend to use at least Eclipse Oxygen 3a or even better Eclipse 2018-09. For older versions of the Eclipse Platform we cannot guarantee backwards compatibility even though we carefully assess any changes that are made.</p>

<h2 id="support-for-designated-test-source-folders">Support for designated test source folders</h2>

<p>Recently Eclipse started to support Java projects with additional source folders that are specifically used for test sources. The project layout thus is more flexible and can be aligned with Maven or Gradle defaults. Test folders are highlighted in the UI and the class path for test sources and non-test sources are separated. This ensures that production code does not reference any test code. The Xtext new project wizard now ensures that new projects mark their source folders appropriately.</p>

<h2 id="improved-testing-support">Improved Testing Support</h2>

<p>The Xtext UI Testing infrastructure provides the <code>org.eclipse.xtext.ui.testing.AbstractHighlightingTest</code> base class for testing the syntactical/semantical highlighting behaviour. The Homeautomation and the State-Machine examples contain corresponding highlighting test cases to demonstrate the usage of the <code>AbstractHighlightingTest</code> class.</p>

<h2 id="improved-progress-reporting">Improved Progress Reporting</h2>

<p>The progress reporting for the Xtext builder was enhanced and does now provide more detailed information about the current task. Especially for full builds it is not easier to estimate the remaining time.</p>

<p><img src="/Xtext/images/releasenotes/2_15_progressmonitor.gif" alt="" height="50%" width="50%" /></p>

<h2 id="task-tags-and-task-tags">Task tags and TASK tags</h2>

<p>The Xtext API for ToDo task tags now supports case sensitive patterns such that a TASK can be rendered differently than a mere Task.</p>

<p><img src="/Xtext/images/releasenotes/2_15_tasktags.png" alt="" height="50%" width="50%" /></p>

<h2 id="navigation-in-external-files">Navigation in External Files</h2>

<p>The editing experience for files that are not contained in a workspace has been improved. Navigation and editing works more reliable now.</p>

<h2 id="command-line-interface-class-for-project-creation">Command line interface class for project creation</h2>

<p>Xtext projects can be created from a command line by invoking the <code>org.eclipse.xtext.xtext.wizard.cli.CliProjectsCreatorMain</code> main class. This class exposes all options that the New Project Wizard offers as command-line options. Call the class to see all options.</p>

<p>Example arguments for the creation of a typical DSL targetting Eclipse UI and Maven Tycho build on Java 10:</p>
<pre><code>-targetDir=./mydsl
-languageName=org.xtext.example.mydsl.MyDsl
-baseName=org.xtext.example.mydsl
-extension=mydsl
-enabledProjects=GenericIDE,RuntimeTest,UIProject,UITest,P2Project
-buildSystem=MAVEN
-sourceLayout=PLAIN
-languageServer=APP
-xtextVersion=2.15.0
-projectLayout=FLAT
-javaVersion=JAVA10
</code></pre>

<h2 id="api-improvements">API Improvements</h2>

<p>The API when working with the Xtext documents was improved. Convenience methods have been added that are more robust against broken document content when the model is accessed from units of work. If you don’t want to see any null resource or if you want to handle exceptions specifically when accessing the model, you may want to use <a href="https://github.com/eclipse-xtext/xtext/blob/main/org.eclipse.xtext.util/src/org/eclipse/xtext/util/concurrent/IWriteAccess.java#L53"><code>tryModify</code></a> or <code>tryReadOnly</code> respectively.</p>

<h2 id="lsp4j-050">LSP4J 0.5.0</h2>

<p>We have updated to LSP4J 0.5.0 which adds support for semantic highlighting.</p>

<p>Although the semantic highlighting <a href="https://microsoft.github.io/language-server-protocol/specification">Language Server Protocol</a> extension is still in a <a href="https://github.com/Microsoft/vscode-languageserver-node/pull/367">proposal</a> state, the Xtext-based language server (LS) is one of the early adopters. The semantic highlighting information is calculated on the Xtext language server and pushed to the client as a notification. This notification carries information about the ranges that have to be colored on the client-side. The desired coloring details are given as <a href="https://manual.macromates.com/en/language_grammars">TextMate scopes</a> for each affected range. Adopters can reuse the entire highlighting logic from the <a href="https://github.com/eclipse-xtext/xtext/blob/main/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/editor/syntaxcoloring/ISemanticHighlightingCalculator.java#L23"><code>ISemanticHighlightingCalculator</code></a> implementation as is to enable the LS-based semantic highlighting. The only thing they have to provide is a mapping between the style IDs and the desired TextMate scopes via the recently introduced <a href="https://github.com/eclipse-xtext/xtext/blob/main/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/semanticHighlight/ISemanticHighlightingStyleToTokenMapper.xtend#L26">token mapper</a>. At this state, it is a must to map each style ID to the corresponding scopes manually.</p>

<p><img src="/Xtext/images/releasenotes/2_15_semantic-highlighting.gif" alt="" height="50%" width="50%" /></p>

<h2 id="update-gradle-to-49">Update Gradle to 4.9</h2>

<p>We have upgraded Gradle to 4.9. New projects are built against the this version.</p>

<h2 id="fixed-issues">Fixed Issues</h2>

<p>As in every release cycle we were eagerly hunting down bugs, and reviewed and integrated plenty of contributions. More than a 100 issues and almost 300 pull requests have made it into this release. For further details please refer to the following lists:</p>

<ul>
  <li>
    <p><a href="https://github.com/search?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3ARelease_2.15+is%3Aclosed+repo%3Aeclipse%2Fxtext+repo%3Aeclipse%2Fxtext-core+repo%3Aeclipse%2Fxtext-lib+repo%3Aeclipse%2Fxtext-extras+repo%3Aeclipse%2Fxtext-eclipse+repo%3Aeclipse%2Fxtext-idea+repo%3Aeclipse%2Fxtext-web+repo%3Aeclipse%2Fxtext-maven+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues&amp;ref=searchresults">Fixed GitHub issues</a></p>
  </li>
  <li>
    <p><a href="https://github.com/search?utf8=%E2%9C%93&amp;q=is%3Apr+milestone%3ARelease_2.15+is%3Aclosed+repo%3Aeclipse%2Fxtext+repo%3Aeclipse%2Fxtext-core+repo%3Aeclipse%2Fxtext-lib+repo%3Aeclipse%2Fxtext-extras+repo%3Aeclipse%2Fxtext-eclipse+repo%3Aeclipse%2Fxtext-idea+repo%3Aeclipse%2Fxtext-web+repo%3Aeclipse%2Fxtext-maven+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues&amp;ref=searchresults">Closed Pull Requests</a></p>
  </li>
  <li>
    <p><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;classification=Modeling&amp;classification=Tools&amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords&amp;f0=OP&amp;f1=OP&amp;f3=CP&amp;f4=CP&amp;known_name=Xtext%202.15&amp;list_id=16618269&amp;product=TMF&amp;product=Xtend&amp;query_based_on=Xtext%202.15&amp;query_format=advanced&amp;status_whiteboard=v2.15&amp;status_whiteboard_type=allwordssubstr">Fixed Eclipse Bugzilla tickets</a></p>
  </li>
</ul>


    			</div>
    		</div>
      </div>
    </div>
  </div>
</div>
    
    <footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="https://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
              <li><a href="https://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
              <li><a href="https://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
              <li><a href="https://www.eclipse.org/legal/">Legal</a></li>
            </ul>
            <ul class="footer-links clearfix">
              <li><a href="https://www.eclipse.org">Eclipse Home</a></li>
              <li><a href="https://marketplace.eclipse.org/">Market Place</a></li>
              <li><a href="https://www.planeteclipse.org/">Eclipse Planet</a></li>
              <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li>
            </ul>
            <br/><br/>
            Xtext is a trademark of the Eclipse Foundation, Inc. and is used with permission
            <br/><br/>
            <img src="/Xtext/images/eclipse-foundation-white-orange.svg" alt="Eclipse Foundation"/>
          </div>
          <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  
  <script src="/Xtext/js/jquery-1.11.3.min.js"></script>
  <script src="/Xtext/js/bootstrap.min.js"></script>
  <script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/Xtext/js/prettify.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-common.js" type="text/javascript"></script>
  <script src="/Xtext/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'https://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  <script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
